Floating point execution units are often used in computer processors to accelerate the processing of complex mathematic computations. Floating point calculations involve performing mathematical computations using one or more floating point values. A floating point value is typically represented as a combination of an exponent and a significand. The significand, which may also be referred to as a fraction or mantissa, represents the digits in a floating point value with a predetermined precision, while the exponent represents the relative position of the binary point for the floating point value.
Conventional floating point execution units are limited to performing arithmetic operations that fit within the exponent range defined by the floating point standard that they are designed to support. The two dominant and widely used floating point standards are IEEE-754 single precision and double precision. The single precision standard uses 32 bits, while double precision uses 64 bits. The single precision standard defines 1 bit to represent the sign, 8 bits to represent the biased exponent and the remaining 23 bits represent the significand. This definition allows a single precision number to range between approximately −2128 and 2128. The double precision standard allows for a much wider range of floating point values, as it uses 11 bits for the biased exponent (approximately −21024 and 21024). Furthermore, the double precision standard includes 52 bits for the significand, thus providing substantially greater precision.
Floating point execution units may be implemented as scalar execution units or vector execution units. Scalar execution units typically operate on scalar floating point values, while vector execution units operate on vectors comprising multiple scalar floating point values. Vector floating point execution units have become popular in many 3D graphics hardware designs because much of the data processed in 3D graphics processing is readily vectorizable (e.g., coordinates of objects in space are often represented using 3 or 4 floating point values). In many conventional designs, vector floating point execution units will use four single precision floating point execution units to process the words in the floating point vectors, because most of the arithmetic in 3D graphics usually fits in the single precision range. In some situations, however, single precision floating point values are not sufficient for some calculations, and double precision arithmetic may be required.
While double precision floating point execution units have greater flexibility for handling a wider range of arithmetic operations, the additional circuitry required to handle double precision floating point values can be costly in terms of power consumption, performance and chip real estate. In general, a four word double precision floating point vector execution unit occupies approximately 2.5-3 times the circuit area of a comparable single precision unit. In addition, double precision units have lower performance, and higher power consumption, than their single precision counterparts. In cases where the arithmetic has too large a range to fit within the bounds of the single precision definition, often times the calculations must be performed with a double precision scalar (not vector) unit, which lowers performance dramatically. In addition, in many conventional graphics processing units (GPUs), oftentimes no double precision unit exists on the chip, so the calculations must be done on the CPU, which lowers performance even further.
It has been found, however, that in many situations, in particular in many computer graphics situations, where double precision floating point numbers are required, they are often only required for their larger exponent range rather than the numerical precision they provide. For example, in the computer gaming realm, cases may exist where a game developer may desire to place and scale objects in a 3D graphics scene that vary greatly in size. For instance, imagine a scene where the viewer is placed in a space ship, traveling towards a planet-sized object at high speed. As the camera moves closer and closer to the object, more detail can be observed. Eventually, the camera is directly on the surface of the object and can begin to magnify and focus on microscopic details such as circuitry or bacteria. The developer's desire is to have this scene be continuous and not change units of measurement, for reasons of art direction and performance. In many instances like this, single precision floating point values do not provide the necessary range.
A need therefore exists in the art for a manner of providing the capability for a floating point execution unit to handle a greater range of floating point values without the additional circuitry that would otherwise be required were a more precise floating point execution unit used.